home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
gnu
/
gnulib
/
libsrc98.zoo
/
ioctl.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-22
|
2KB
|
110 lines
/*
* Cross Development System for Atari ST
* Copyright (c) 1988, Memorial University of Newfoundland
*
* A simple hack for ioctl - note that some fields of the structures are not
* filled in.
*
*/
#include <ioctl.h>
#include <errno.h>
#include <tchars.h>
#include <osbind.h>
#include <device.h>
#include <unistd.h>
#include <linea.h> /* for TIOCGWINSZ under TOS */
int
ioctl(fd, func, arg)
int fd;
int func;
void *arg;
{
struct sgttyb *sg;
struct tchars *tc;
struct ltchars *ltc;
struct _device *dev;
if ((dev = _dev_fd(fd)) && dev->ioctl)
return (*dev->ioctl)(fd, func, arg);
if (!isatty(fd)) {
errno = ENOTTY;
return -1;
}
switch (func) {
case TIOCGETP:
sg = (struct sgttyb *) arg;
sg->sg_ispeed = sg->sg_ospeed = B4800;
sg->sg_erase = __tchars[TC_ERASE];
sg->sg_kill = __tchars[TC_KILL];
sg->sg_flags = __ttymode;
break;
case TIOCSETP:
sg = (struct sgttyb *) arg;
__tchars[TC_ERASE] = sg->sg_erase;
__tchars[TC_KILL] = sg->sg_kill;
__ttymode = sg->sg_flags;
break;
case TIOCGETC:
tc = (struct tchars *) arg;
tc->t_intrc = __tchars[TC_INTRC];
tc->t_quitc = __tchars[TC_QUITC];
tc->t_startc = TC_UNDEF;
tc->t_stopc = TC_UNDEF;
tc->t_eofc = __tchars[TC_EOFC];
tc->t_brkc = __tchars[TC_BRKC];
break;
case TIOCSETC:
tc = (struct tchars *) arg;
__tchars[TC_INTRC] = tc->t_intrc;
__tchars[TC_QUITC] = tc->t_quitc;
__tchars[TC_EOFC] = tc->t_eofc;
__tchars[TC_BRKC] = tc->t_brkc;
break;
case TIOCGLTC:
ltc = (struct ltchars *) arg;
ltc->t_suspc = TC_UNDEF;
ltc->t_dsuspc = TC_UNDEF;
ltc->t_rprntc = __tchars[TC_RPRNTC];
ltc->t_flushc = TC_UNDEF;
ltc->t_werasc = __tchars[TC_WERASC];
ltc->t_lnextc = __tchars[TC_LNEXTC];
break;
case TIOCSLTC:
ltc = (struct ltchars *) arg;
__tchars[TC_RPRNTC] = ltc->t_rprntc;
__tchars[TC_WERASC] = ltc->t_werasc;
__tchars[TC_LNEXTC] = ltc->t_lnextc;
break;
case TIOCSWINSZ:
break;
case TIOCGWINSZ:
{
struct winsize *win = (struct winsize *)arg;
#ifndef __SOZOBON__
(void)linea0();
#else /* __SOZOBON__ */
linea0();
#endif /* __SOZOBON__ */
win->ws_row = V_CEL_MY + 1;
win->ws_col = V_CEL_MX + 1;
win->ws_xpixel = V_X_MAX;
win->ws_ypixel = V_Y_MAX;
}
default:
errno = EINVAL;
return -1;
}
return 0;
}